package com.jhm.bing_fa_rong_qi.ThreadPool;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

public class ThreadPoolExample {
    public static void main(String[] args) {
        // 创建一个固定大小的线程池
        ExecutorService executor = Executors.newFixedThreadPool(3);

        // 提交任务给线程池执行
        executor.submit(() -> {
            System.out.println("任务1 正在执行");
            try {
                Thread.sleep(1000); // 模拟任务执行时间
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("任务1 执行完毕");
        });

        executor.submit(() -> {
            System.out.println("任务2 正在执行");
            try {
                Thread.sleep(2000); // 模拟任务执行时间
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("任务2 执行完毕");
        });

        executor.submit(() -> {
            System.out.println("任务3 正在执行");
            try {
                Thread.sleep(3000); // 模拟任务执行时间
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("任务3 执行完毕");
        });

        // 关闭线程池，不再接受新任务，但已提交的任务会继续执行
        executor.shutdown();

        // 等待所有任务执行完毕
        try {
            if (!executor.awaitTermination(5, TimeUnit.SECONDS)) {
                // 超时后终止当前正在执行的任务
                executor.shutdownNow();
            }
        } catch (InterruptedException ex) {
            // 如果等待时被中断，重新尝试关闭线程池
            executor.shutdownNow();
        }
    }
}